package com.ins.model.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.core.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 实体基类
 *
 * @author ins
 * @version 1.0
 * @since 2024/5/13
 */
@Data
@EqualsAndHashCode(callSuper = true)
public abstract class BaseEntity<T extends Model<T>> extends Model<T> implements Serializable {

    @Serial
    private static final long serialVersionUID = 4820442863484682855L;

    /**
     * 记录标识;记录标识
     */
    @Id(keyType = KeyType.None)
    private Long id;

    /**
     * 创建时间;创建时间
     */
    @Column(onInsertValue = "now()")
    private LocalDateTime createTime;

    /**
     * 修改时间;修改时间
     */
    @Column(onUpdateValue = "now()")
    private LocalDateTime updateTime;

    /**
     * 创建人;创建人
     */
    @Column("create_by")
    private String createBy;

    /**
     * 修改人;修改人
     */
    @Column("update_by")
    private String updateBy;

    /**
     * 是否删除;是否删除
     * 其中[strategyName = "DELETE_WITH_USER_TIME"]表示逻辑删除策略使用名称叫做[DELETE_WITH_USER_TIME]的
     * 所以你自定义的时候必须注册一个名称[DELETE_WITH_USER_TIME]的逻辑删除
     */
    @Column(isLogicDelete = true)
    private Integer deleted;

    /**
     * 删除人
     */
    @Column("deleteBy")
    private String deleteBy;

}


